package com.pz;

import com.pz.service.MyService;

public class BootStart {
    public static void main(String[] args) {
        /**
         * 与我们可能更熟悉的动态代理的实现原理不同，这种AOP的实现方式是通过编译器来实现的。
         * 使用的编译器不是javac，而是在pom.xml中添加插件aspectj-maven-plugin，调用的
         * 是另外的编译器。编译器在编译的过程会识别注解去实现AOP。
         * 这种方式直接修改的是.class文件，而不是产生新的代理对象，所以我们打印类文件时，可以看到
         * 还是原来的Class。
         * 使用注意点：idea运行时默认调用的是javac编译器，而不是我们添加的ajc编译器。所以请使用
         * maven中的complile来编译
         * 另：把编译目录target下的类文件多过来，idea会自动反编译，也就可以看到真实的内容呢
         * 这种AOP方式不是特别常用，但它也有好处：比如动态代理的方式本质是通过重写方法，这样的话static方法
         * 其实重写不了，而这种方式可以突破这种限制，即使是static也可以增强。
         *
         */
        MyService myService = new MyService();
        System.out.println("Class类型: " +  myService.getClass());
        myService.foo();
    }
}
